package com.lyf.scm.plan.domain.service;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * redis服务器测试
 *
 * @author wangchlei
 * @date 2020/09/20
 */
public interface RedisService {
    /**
     * 获取所有键值对
     *
     * @param
     * @return {@link  List<Map<Object, Object>>}
     **/
    List<Map<Object, Object>> getAllRedisVal1();

    /**
     * 分页获取所有键值对
     *
     * @param pageSize
     * @param pageNumber
     * @return {@link List<Map<Object,Object>>}
     **/
    List<Map<Object, Object>> getAllRedisVal2(Integer pageSize, Integer pageNumber);

    /**
     * 根据key读取缓存
     *
     * @param key
     * @return
     */
    Object get(String key);

    /**
     * 设置 key--value 键值对
     *
     * @param key
     * @param value
     * @return {@link boolean}
     **/
    boolean set(String key, Object value);

    /**
     * 设置 key--value 键值对（含有失效时长,秒为单位）
     *
     * @param key
     * @param value
     * @param expireTime
     * @return {@link boolean}
     **/

    boolean set(String key, Object value, Long expireTime);

    /**
     * 批量删除 key--value 键值对
     *
     * @param keys
     * @return void
     **/

    boolean remove(String... keys);

    /**
     * 批量删除key
     *
     * @param pattern
     */
    void removePattern(String pattern);

    /**
     * 删除对应的value
     *
     * @param key
     */
    void remove(String key);

    /**
     * 判断缓存中是否有对应的value
     *
     * @param key
     * @return
     */
    boolean exists(String key);

    /**
     * 哈希 添加
     *
     * @param key
     * @param hashKey
     * @param value
     */
    void hmSet(String key, Object hashKey, Object value);

    /**
     * 哈希获取数据
     *
     * @param key
     * @param hashKey
     * @return
     */
    Object hmGet(String key, Object hashKey);

    /**
     * 列表添加
     *
     * @param k
     * @param v
     */
    void lPush(String k, Object v);

    /**
     * 列表获取
     *
     * @param k
     * @param l
     * @param l1
     * @return
     */
    List<Object> lRange(String k, long l, long l1);

    /**
     * 集合添加
     *
     * @param key
     * @param value
     */
    void setArray(String key, Object value);

    /**
     * 集合获取
     *
     * @param key
     * @return
     */
    Set<Object> getArray(String key);

    /**
     * 有序集合添加
     *
     * @param key
     * @param value
     * @param scoure
     */
    void zAdd(String key, Object value, double scoure);

    /**
     * 有序集合获取
     *
     * @param key
     * @param scoure
     * @param scoure1
     * @return
     */
    Set<Object> rangeByScore(String key, double scoure, double scoure1);

    /**
     * 获取key的失效时长（秒）
     *
     * @param key
     * @return {@link Object}
     **/
    Long getExpireTime(String key);

    void batchRemove(String key);
}
